<?php
#
#
# Copyright TEDECO, 2009. http://tedeco.fi.upm.es
#
# This file is part of kumenya.
#
# Kumenya is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Kumenya is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
#
#
#
?>
<?php
class CuentaContable
{
	
	const AMBITO = Contabilidad;

	static public function getCampos ($tabla = false) {
		$gestorBD = new GestorBD();
		$campos = $gestorBD->CamposMultiplesTablas("MostrarCamposCuentaContable", self::AMBITO, TablaDeCuentasContables, $tabla);
		return $campos;
	}

	static public function getCamposAlta ($tabla = false) {
		$gestorBD = new GestorBD();
		$campos = $gestorBD->CamposMultiplesTablas("MostrarCamposAltaCuentaContable", self::AMBITO, TablaDeCuentasContables, $tabla);
		return $campos;
	}

	static public function DarDeAlta ($camposRellenos) {
		$gestorBD = new GestorBD();
		$exito = $gestorBD->EjecutarProcedimiento ('AltaDeCuentaContable',self::AMBITO,$camposRellenos);		
		if ($exito)
			Interfaz::Resultado($gestorBD->ObtenerResultado());
		else
			Interfaz::Error($gestorBD->ObtenerError());
		return $exito;		
	}

	static public function CriteriosConsulta () {
		$gestorBD = new GestorBD();
		$criterios = $gestorBD->CriteriosConsulta ('ConsultaDeCuentaContableNinguno',self::AMBITO);
		if (empty($criterios)) {
			Interfaz::Error($gestorBD->ObtenerError());
		}
		return $criterios;
	}	

	static public function ConsultarEnIntervalo ($criterios) {
		$gestorBD = new GestorBD();
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('CuentasEnIntervalo',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function Consultar ($criterios, $tipoConsulta = FALSE) {
		$tabla = array();
		$gestorBD = new GestorBD();

		// CUENTAS CONTABLES SIN TERCERO ASOCIADO
		if ($tipoConsulta == Ninguno || $tipoConsulta == Todos || !$tipoConsulta) {
			$tablaNinguno = $gestorBD->EjecutarProcedimientoConsulta ('ConsultaDeCuentaContableNinguno',self::AMBITO, $criterios);
			if (!is_array($tablaNinguno))
				Interfaz::Error($gestorBD->ObtenerError());
			else			
				$tabla[Ninguno] = $tablaNinguno;
		}
			
		// CUENTAS CONTABLES ASOCIADAS A ORGANIZACIONES
		if ($tipoConsulta == Organizacion || $tipoConsulta == Todos || !$tipoConsulta) {
			$tablaOrganizaciones = $gestorBD->EjecutarProcedimientoConsulta ('ConsultaDeCuentaContableOrganizaciones',self::AMBITO, $criterios);
			if (!is_array($tablaOrganizaciones))
				Interfaz::Error($gestorBD->ObtenerError());
			else			
				$tabla[Organizacion] = $tablaOrganizaciones;
		}

		// CUENTAS CONTABLES ASOCIADAS A PERSONAS
		if ($tipoConsulta == Persona || $tipoConsulta == Todos || !$tipoConsulta) {
			$tablaPersonas = $gestorBD->EjecutarProcedimientoConsulta ('ConsultaDeCuentaContablePersonas',self::AMBITO, $criterios);
			if (!is_array($tablaPersonas))
				Interfaz::Error($gestorBD->ObtenerError());
			else			
				$tabla[Persona] = $tablaPersonas;
		}
		
		return $tabla;
	}

	static public function VerDetalles ($tipoCuenta,$identificador) {
		$gestorBD = new GestorBD();

		switch ($tipoCuenta) {
			// CUENTAS CONTABLES SIN TERCERO ASOCIADO		
  			case Ninguno:
					$tabla = $gestorBD->EjecutarProcedimientoConsulta ('DetalleDeCuentaContableNinguno',self::AMBITO, $identificador);
					break;
		
			// CUENTAS CONTABLES ASOCIADAS A ORGANIZACIONES
			case Organizacion:
					$tabla = $gestorBD->EjecutarProcedimientoConsulta ('DetalleDeCuentaContableOrganizaciones',self::AMBITO, $identificador);
					break;
	
			// CUENTAS CONTABLES ASOCIADAS A PERSONAS
			case Persona:
					$tabla = $gestorBD->EjecutarProcedimientoConsulta ('DetalleDeCuentaContablePersonas',self::AMBITO, $identificador);
					break;
		}

		if (!is_array($tabla) || empty($tabla)) {
			Interfaz::Error($gestorBD->ObtenerError());
			return FALSE;
		}
		return $tabla[0];
	}
	
	static public function Modificar ($camposRellenos) {
		$gestorBD = new GestorBD();
		$exito = $gestorBD->EjecutarProcedimiento ('ModificacionDeCuentaContable',self::AMBITO,$camposRellenos);		
		if ($exito)
			Interfaz::Resultado($gestorBD->ObtenerResultado());
		else
			Interfaz::Error($gestorBD->ObtenerError());
		return $exito;		

	}

	static public function DarDeBaja ($camposRellenos) {
		$gestorBD = new GestorBD();
		$exito = $gestorBD->EjecutarProcedimiento ('BajaDeCuentaContable',self::AMBITO,$camposRellenos);		
		if ($exito)
			Interfaz::Resultado($gestorBD->ObtenerResultado());
		else
			Interfaz::Error($gestorBD->ObtenerError());
		return $exito;		

	}

	static public function CriteriosBalanceMayor () {
		$gestorBD = new GestorBD();
		$criterios = $gestorBD->CriteriosConsulta ('MayorDeCuenta',self::AMBITO);
		if (empty($criterios)) {
			Interfaz::Error($gestorBD->ObtenerError());
		}
		return $criterios;
	}

	static public function BalanceMayor ($camposRellenos) {
		$gestorBD = new GestorBD();
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('MayorDeCuenta',self::AMBITO,$camposRellenos);		
		if (!is_array($tabla)) {
			Interfaz::Error($gestorBD->ObtenerError());
			return FALSE;
		}
		return $tabla;
	}

	static public function TotalBalanceMayor ($camposRellenos) {
		$gestorBD = new GestorBD();
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('MayorDeCuentaTotal',self::AMBITO,$camposRellenos);		
		if (!is_array($tabla)) {
			Interfaz::Error($gestorBD->ObtenerError());
			return FALSE;
		}
		return $tabla;
	}

	static public function CriteriosBalanceSumasSaldos () {
		$FechaInicio = Interfaz::CrearCampo("FechaInicio", Fecha, Si);
		$FechaFin = Interfaz::CrearCampo("FechaFin", Fecha, Si);
		$Clases = Interfaz::CrearCampo("Clases",CheckBox,Si);
		$Cuentas = Interfaz::CrearCampo("Cuentas",CheckBox,Si);
		$Subcuentas = Interfaz::CrearCampo("Subcuentas",CheckBox,Si);
		
		$campos = Interfaz::AgregarCampos($Clases, $Cuentas);
		$campos = Interfaz::AgregarCampos($campos, $Subcuentas);
		$campos = Interfaz::AgregarCampos($campos, $FechaInicio);
		$campos = Interfaz::AgregarCampos($campos, $FechaFin);
		return $campos;

	}

	static public function ObtenerClasesSumasSaldos () {
		$gestorBD = new GestorBD();
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('ObtenerClases',self::AMBITO, array());
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ObtenerCuentasSumasSaldos ($criterios) {
		$gestorBD = new GestorBD();
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('ObtenerCuentas',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ObtenerSubcuentasSumasSaldos ($criterios) {
		$gestorBD = new GestorBD();
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('ObtenerSubcuentas',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function SumasSaldosCuenta ($criterios) {
		$gestorBD = new GestorBD();
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('SumasSaldosCuenta',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function SumasSaldosClase ($criterios) {
		$gestorBD = new GestorBD();
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('SumasSaldosClase',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function SumasSaldosSubcuenta ($criterios) {
		$gestorBD = new GestorBD();
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('SumasSaldosSubcuenta',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function CriteriosBalanceActivoPasivo () {
		$FechaInicio = Interfaz::CrearCampo("FechaInicio", Fecha, Si);
		$FechaFin = Interfaz::CrearCampo("FechaFin", Fecha, Si);
		$Cuentas = Interfaz::CrearCampo("Cuentas",CheckBox,Si);
		$Subcuentas = Interfaz::CrearCampo("Subcuentas",CheckBox,Si);
		
		$campos = Interfaz::AgregarCampos($Cuentas, $Subcuentas);
		$campos = Interfaz::AgregarCampos($campos, $FechaInicio);
		$campos = Interfaz::AgregarCampos($campos, $FechaFin);
		return $campos;

	}

	static public function ObtenerClasesActivo () {
		$gestorBD = new GestorBD();
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('ClasesInformes',self::AMBITO, array(TipoCuenta => Activo));
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ObtenerCuentasActivo ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Activo));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('CuentasInformes',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ObtenerSubcuentasActivo ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Activo));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('SubcuentasInformes',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ObtenerClasesPasivo () {
		$gestorBD = new GestorBD();
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('ClasesInformes',self::AMBITO, array(TipoCuenta => Pasivo));
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ObtenerCuentasPasivo ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Pasivo));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('CuentasInformes',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ObtenerSubcuentasPasivo ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Pasivo));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('SubcuentasInformes',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ActivoClases ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Activo));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('InformesClases',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ActivoCuentas ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Activo));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('InformesCuentas',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ActivoSubcuentas ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Activo));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('InformesSubcuentas',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function PasivoClases ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Pasivo));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('InformesClases',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function PasivoCuentas ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Pasivo));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('InformesCuentas',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function PasivoSubcuentas ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Pasivo));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('InformesSubcuentas',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}
	
	static public function ObtenerClasesIngresos () {
		$gestorBD = new GestorBD();
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('ClasesInformes',self::AMBITO, array(TipoCuenta => Ingresos));
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ObtenerCuentasIngresos ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Ingresos));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('CuentasInformes',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function IngresosClases ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Ingresos));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('InformesClases',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function IngresosCuentas ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Ingresos));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('InformesCuentas',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ObtenerClasesGastos () {
		$gestorBD = new GestorBD();
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('ClasesInformes',self::AMBITO, array(TipoCuenta => Gastos));
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ObtenerCuentasGastos ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Gastos));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('CuentasInformes',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}
	
	static public function GastosClases ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Gastos));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('InformesClases',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function GastosCuentas ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Gastos));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('InformesCuentas',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ObtenerSubcuentasIngresos ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Ingresos));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('SubcuentasInformes',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function ObtenerSubcuentasGastos ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Gastos));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('SubcuentasInformes',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function IngresosSubcuentas ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Ingresos));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('InformesSubcuentas',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

	static public function GastosSubcuentas ($criterios) {
		$gestorBD = new GestorBD();
		$criterios = array_merge ($criterios, array(TipoCuenta => Gastos));
		$tabla = $gestorBD->EjecutarProcedimientoConsulta ('InformesSubcuentas',self::AMBITO, $criterios);
		if (!is_array($tabla))
			return FALSE;
		return $tabla;
	}

}